/**
* <h3>For felix's suggestion, I build this Template for the Code Standard.</h3>
* 
* <h4>Convention.</h4>
* <ul>
* 	<li>A blank line between each parameters or functions.</li>
* 	<li>The const parameter must be UpperCase and split with '_'.</li>
* 	<li>The general parameter must be LowerCase, capitalize the first letter since second word if there are more than two words.</li>
* 	<li>The private parameter same as upper but must be begin with '_'.</li>
* 	<li>Must a Logger for class.</li>
* 	<li>Must a exception handing in the catch block.</li>
* 	<li>[more details in below comments.]</li>
* 	<li>[any thing else by your hand...]</li>
* </ul>

* <h4>Point of discussion.</h4>
* <ul>
* 	<li>How to do the lower resource consumption?</li>
* 	<li>If we need obfuscate the code?</li>
* 	<li>[any thing else by your hand...]</li>
* </ul>
*
* PS: the 'Component' which is your owner component name.
* 
* @author [Your Name]
* @since [UXCore Version]
*/
jsx3.Class.defineClass("tibco.uxcore.gui.Component", null, null, function(Component, Component_prototype) {

	/** this is the const parameter. */
	Component.THE_CONST_PARAMETER = 'a const parameter.';

	/** this is the private const parameter. */
	Component._THE_PRIVATE_PARAMETER = 'a private const parameter.';

	/** this is the general parameter. */
	Component_prototype.versioin = '0.1';

	/** this is the long named parameter. */
	Component_prototype.strIAmReallyALongName = 'I am a long name.';

	/** 
	* this is the private parameter. 
	* @private
	*/
	Component_prototype._privateName = 'who know me?';

	/** @private @jsxobf-clobber */
	Component_prototype._privateClobberName = 'any body can not know me!';

	/**
	* logger instance, used for debug.
	*/
	var LOG = jsx3.util.Logger.getLogger(Component.jsxclass.getName());

	/**
	* this is a public functioin, you can use it anywhere like 'tibco.uxcore.gui.Component.publicFunction(strParam)'.
	* @param strName {String} the full name of the package to retrieve
	* @return {String} the re-name of input or <code>null</code> if none matches
	*/
	Component.publicFunction = function(strName) {
		return 'I am ' + strName;
	};

	/**
	* this is a private function.
	* @private 
	*/
	Component_prototype._privateFunction = function() {
		return this._privateClobberName;
	};

	/**
	* Returns the version of this class.
	* @return {String}
	*/
	Component_prototype.getVersion = function() {
		return this.version;
	};

	/**
	* when you want to use 'try...catch...' :<br />
	* 1, must be a LOG in the try block;
	* 2, must be a THROW in the catch block.
	*/
	Component_prototype.trySomeThing = function() {
		try{
			if (true) 
				LOG('must be a LOG in the try block.');
			if (1 != 2)
				throw 'I am sorry, 1 is not 2.';
		}catch(e){
			throw new jsx3.Exception('if anything error, please catch and throw it! ', e);
		}
	};

});
